package com.zb.zeus.system.api.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.zb.zeus.common.core.web.domain.TreeEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.Date;
import java.util.List;

/**
 * 自建业务组织结构对象 t_sys_org_business
 *
 * @author Chenpeng.Huang
 * @date 2021/07/28 14:25
 **/

@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "t_sys_org_business")
@ApiModel(value = "SysOrgBusiness自建业务组织结构模型", description = "SysOrgBusiness自建业务组织结构数据表模型")
public class SysOrgBusiness extends TreeEntity {
    private static final long serialVersionUID = 5859391507864341382L;

    /** 组织编码(80000000开始递增) */
    @TableField(value = "code")
    @ApiModelProperty(value = "组织编码(80000000开始递增)")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long code;

    /** 组织名称 */
    @TableField(value = "name")
    @ApiModelProperty(value = "组织名称")
    private String name;

//    /** 组织属性 */
//    @TableField(value = "property")
//    @ApiModelProperty(value = "组织属性")
//    private String property;

    /** 是否封存 */
    @TableField(value = "status")
    @ApiModelProperty(value = "是否封存")
    private Integer status;

//    /** 考核参数设置 */
//    @TableField(value = "assess_setting")
//    @ApiModelProperty(value = "考核参数设置")
//    private String assessSetting;

//    /** 是否主考核主体 */
//    @TableField(value = "assess_main")
//    @ApiModelProperty(value = "是否主考核主体")
//    private Integer assessMain;

//    /**
//     * 是否考核主体(叶子节点上，1的时候不可以加下级节点，必须维护关联关系；0时可以添加子节点,不需要维护关联关系)。
//     */
//    @TableField(value = "assess")
//    @ApiModelProperty(value = "是否考核主体(叶子节点上，1的时候不可以加下级节点，必须维护关联关系；0时可以添加子节点,不需要维护关联关系)")
//    private Integer assess;

    /**
     * 版块id
     */
    @TableField(value = "section_id")
    @ApiModelProperty(value = "版块id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long sectionId;

    @TableField(exist = false)
    @ApiModelProperty(value = "板块编码")
    private String sectionCode;

    /**
     * 责任人，对应员工表ad号(字段ad_num)
     */
    @TableField(value = "director")
    @ApiModelProperty(value = "责任人，对应员工表ad号(字段ad_num)")
    private String director;

    /**
     * 责任人姓名，对应员工表员工姓名(字段emp_name)
     */
    @TableField(value = "director_name")
    @ApiModelProperty(value = "责任人姓名，对应员工表员工姓名(字段emp_name)")
    private String directorName;

    /** 数据字典 组织类型，枚举值：集团1、事业部2、大区3、片区4、分公司5、部门6、管理区域7 */
    @TableField(value = "type")
    @ApiModelProperty(value = "组织类型，枚举值：集团1、事业部2、大区3、片区4、分公司5、部门6、管理区域7、基地8")
    private Integer type;

    /** 排序 */
    @TableField(value = "sort")
    @ApiModelProperty(value = "排序")
    private Integer sort;

    /** 所属区域 */
    @TableField(value = "belong_area")
    @ApiModelProperty(value = "所属区域")
    private String belongArea;

    /**
     * 备注
     */
    @TableField(value = "remarks")
    @ApiModelProperty(value = "备注")
    private String remarks;


    /**
     * 时间戳
     */
    @ApiModelProperty(value = "时间戳")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date ts;

    @TableField(exist = false)
    @ApiModelProperty(value = "组织名称数组")
    private List<String> nameList;

    @TableField(exist = false)
    @ApiModelProperty(value = "组织编码数组")
    private List<Long> codeList;

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("createTime", getCreateTime())
                .append("createBy", getCreateBy())
                .append("createName", getCreateName())
                .append("updateTime", getUpdateTime())
                .append("updateBy", getUpdateBy())
                .append("updateName", getUpdateName())
                .append("dr", getDr())
                .append("ts", getTs())
                .append("version", getVersion())
                .append("code", getCode())
                .append("name", getName())
                .append("parentId", getParentId())
                .append("status", getStatus())
                .append("fullPath", getFullPath())
                .append("sectionId", getSectionId())
                .append("director", getDirector())
                .append("directorName", getDirectorName())
                .append("type", getType())
                .toString();
    }
}
